package org.smile.excel.jdbc;

import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import org.smile.dataset.DataSetMetaData;

public class ExcelMetaData implements ResultSetMetaData{
	
	DataSetMetaData metaData;
	//sheet页名称
	String name;
	
	public ExcelMetaData(String name,DataSetMetaData metaData){
		this.metaData=metaData;
		this.name=name;
	}
	
	@Override
	public <T> T unwrap(Class<T> iface) throws SQLException {
		return null;
	}

	@Override
	public boolean isWrapperFor(Class<?> iface) throws SQLException {
		return false;
	}

	@Override
	public int getColumnCount() throws SQLException {
		return metaData.getColumnCount();
	}

	@Override
	public boolean isAutoIncrement(int column) throws SQLException {
		return false;
	}

	@Override
	public boolean isCaseSensitive(int column) throws SQLException {
		return false;
	}

	@Override
	public boolean isSearchable(int column) throws SQLException {
		return false;
	}

	@Override
	public boolean isCurrency(int column) throws SQLException {
		return false;
	}

	@Override
	public int isNullable(int column) throws SQLException {
		return 0;
	}

	@Override
	public boolean isSigned(int column) throws SQLException {
		return false;
	}

	@Override
	public int getColumnDisplaySize(int column) throws SQLException {
		return this.metaData.getColumnCount();
	}

	@Override
	public String getColumnLabel(int column) throws SQLException {
		return this.metaData.getColumnName(column-1);
	}

	@Override
	public String getColumnName(int column) throws SQLException {
		return this.metaData.getColumnName(column-1);
	}

	@Override
	public String getSchemaName(int column) throws SQLException {
		return this.name;
	}

	@Override
	public int getPrecision(int column) throws SQLException {
		return 0;
	}

	@Override
	public int getScale(int column) throws SQLException {
		return 0;
	}

	@Override
	public String getTableName(int column) throws SQLException {
		return this.name;
	}

	@Override
	public String getCatalogName(int column) throws SQLException {
		return this.name;
	}

	@Override
	public int getColumnType(int column) throws SQLException {
		return ExcelDriver.getJdbcType(this.metaData.getColumnType(column-1));
	}

	@Override
	public String getColumnTypeName(int column) throws SQLException {
		return ExcelDriver.getJdbcTypeName(getColumnType(column));
	}

	@Override
	public boolean isReadOnly(int column) throws SQLException {
		return false;
	}

	@Override
	public boolean isWritable(int column) throws SQLException {
		return false;
	}

	@Override
	public boolean isDefinitelyWritable(int column) throws SQLException {
		return false;
	}

	@Override
	public String getColumnClassName(int column) throws SQLException {
		Class clazz=this.metaData.getColumnType(column-1);
		if(clazz==null){
			clazz=String.class;
		}
		return clazz.getName();
	}

}
